#include "video.h"
#include "keyboard.h"
#include "print.h"

#define TAB_LENGHT	4

/* variables globales */
extern unsigned char keyboardBuffer[];
extern int bufferFlag;
extern int bufferPosition;
extern int videoCursor;
extern int actualAtribute;

char string_promt[]="user@lumax >";


/*
 * imprime en la posicion actual del cursor
 * el ascii.
 * si es un '\n' va a una nueva linea
 * si es un '\b' elimina de la pantalla y del buffer
 * 		ultimo caracter mostrado
 * si es un '\t' pone varios espacios contiguos
 * */
void
print(char ascii)
{
	switch (ascii){
		case '\n':	goToNewLine(); break;
		case '\b':	backspace(); break;
		case '\t':	tab(); break;
		default: putChar(ascii); break;
	}
	return;		
}


/*
 * dado un numero en formato BCD, lo manda a la linea del RTC en pantalla
 * en formato decimal
 */
void
printBCDNum(byte num)
{
	int high, low;
	
	low= num & 0x0F;
	high= (num & 0xF0)>>4;
	
	printAtRTCline(high+'0');
	printAtRTCline(low+'0');
	
	return;
	
}



/*
 * borra de la pantalla el ultimo caracter mostrado, y 
 * elimina del buffer del teclado el caracter '\b' y el anterior
 * */
void
backspace(void)
{
	int row, col;
	if(bufferPosition==1)/* lo unico que hay en el buffer es el \b */
	{
		bufferPosition=0;
		return;
	}

	getCursorPosition(&row, &col);
	if(col!=0)
	{
		setCursorPosition(row, col-2);
		putChar(' ');
		setCursorPosition(row, col-2);
	}
	bufferPosition-=2;
	if(bufferPosition <0)
		bufferPosition=0;
	return;
}


/*
 * se mueve a la proxima linea de la pantalla.
 * si era la ultima permitida, "shiftea" toda la pantalla
 * hacia arriba una fila.
 */
void 
goToNewLine(void)
{
	int row, col;

	getCursorPosition(&row, &col);
	if(row==SHOW_SCREEN_LENGTH-1)
	{
		scrollDown();
		row--;
	}
	setCursorPosition(row+1,0);
	bufferPosition=0;
	return;	
}

/*
 * muestra el prompt en pantalla
 */
void
showPrompt(void)
{
	putString(string_promt);
	return;
}

/*
 * imprime en pantalla tantos espacios como diga la 
 * constante TAB_LENGTH 
 */
void 
tab(void)
{
	int i;
	for(i=0; i<TAB_LENGHT; i++)
		putChar(' ');
	return;
}


/*manda un string terminado en 0 a la pantalla.
 * (puede contener '\n' '\t' y '\b')
 */ 
void
putString(char *string)
{
	int i=0;
	
	while( string[i] != 0 )
		print( string[i++] );
	
	return;
}

